﻿//2958. 最多 K 个重复元素的最长子数组
//给你一个整数数组 nums 和一个整数 k 。
//一个元素 x 在数组中的 频率 指的是它在数组中的出现次数。
//如果一个数组中所有元素的频率都 小于等于 k ，那么我们称这个数组是 好 数组。
//请你返回 nums 中 最长好 子数组的长度。
//子数组 指的是一个数组中一段连续非空的元素序列。


class Solution {
public:
    int maxSubarrayLength(vector<int>& nums, int k)
    {
        unordered_map<int, int> table;
        int begin = 0, end = -1;
        int len = 0;
        int n = nums.size();
        for (end = 0; end < n; end++)
        {
            table[nums[end]]++;
            while (table[nums[end]] > k)
            {
                table[nums[begin]]--;
                if (table[nums[begin] == 0])
                {
                    table.erase(nums[begin]);
                }
                begin++;
            }
            len = max(len, end - begin + 1);
        }
        return len;
    }
};